// sort排序的参数（函数），rev是布尔值，true是升序，false为降序
// 使用方法  arr.sort(sortparameter('排序依据用那个值排序', 布尔值))
const sortparameter = (prop, rev) => {
  if (rev === undefined) {
    rev = 1;
  } else {
    rev = (rev) ? 1 : -1;
  }
  return function(a, b) {
    a = a[prop];
    b = b[prop];
    if (a < b) { return rev * -1; }
    if (a > b) { return rev * 1; }
    return 0;
  };
};
// 防抖函数
const debounceGenerater = () => {
  let timer = null;
  return function(fn, delay) {
    timer && clearTimeout(timer);
    timer = setTimeout(() => {
      fn();
    }, delay);
  };
};

// 节流函数
function throttle(fn, delay) {
  let timer = null;
  return function() {
    if (!timer) {
      fn.apply(this, arguments);
      timer = setTimeout(() => {
        timer = null;
      }, delay);
    }
  };
}

// 拖拽事件--鼠标按下
function imgMousedown(dom, e) {
  // dom为移动元素，e为事件源
  // 算出鼠标相对元素的位置
  // client 是鼠标距离左上角的距离
  // offsetLeft/offsetTop  是当前元素距离左上角的距离
  const disX = e.clientX - dom.offsetLeft;
  const disY = e.clientY - dom.offsetTop;
  dom.onmousemove = (e) => { // 鼠标按下并移动的事件
    // console.log(e.target);
    // 用鼠标的位置减去鼠标相对元素的位置，得到元素的位置并直接移动到计算位置
    const left = e.clientX - disX;
    const top = e.clientY - disY;
    // 避免鼠标快速移动超出元素，要立即停止移动事件
    // if (e.clientX < dom.offsetLeft || e.clientX > dom.offsetLeft + dom.clientWidth || e.clientY < dom.offsetTop || e.clientY > dom.offsetTop + dom.offsetHeight) {
    //   // || dom.offsetLeft < 5 || dom.offsetTop < 5
    //   // dom.onmousemove = null;
    //   return;
    // }
    dom.style.left = left + 'px';
    dom.style.top = top + 'px';
  };
  // 鼠标松手直接清楚事件
  dom.onmouseup = () => {
    dom.onmousemove = null;
    dom.onmouseup = null;
    // this.imgs1 = false;
  };
}

// 计算字体宽度
function computeFontSize(str, size) {
  const Dom = document.createElement('span');
  Dom.style.fontSize = size + 'px';
  Dom.style.opacity = '0';
  Dom.innerHTML = str;
  document.body.append(Dom);
  let width = 0;
  width = Dom.offsetWidth;
  Dom.remove();
  return width;
}

export { sortparameter, debounceGenerater, throttle, imgMousedown, computeFontSize };
